package cn.com.dcsgo;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.*;

/**
 * Main
 *
 * @author Dcsgo
 * @since 2025/4/20 上午7:30
 */

public class Main {

    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要进行文件去重的目录(目录分隔符请使用/)：");
        String rootPath = scanner.nextLine();

        // 获取相似文件
        HashMap<String, LinkedList<File>> similarityFiles = FileUtils.getSimilarityFiles(rootPath);
        if (similarityFiles == null || similarityFiles.isEmpty()) {
            System.out.println("没有相似文件");
            return;
        }

        // 创建保存相似文件的根目录
        File sameFileRootPath = new File(rootPath + "/sameFiles");
        if (!sameFileRootPath.mkdir()) {
            System.out.println("相似文件根目录：sameFiles 创建失败");
            return;
        }
        System.out.println("相似文件：sameFiles 创建成功");

        // 遍历相似文件，创建目录并移动文件
        for (Map.Entry<String, LinkedList<File>> entry : similarityFiles.entrySet()) {
            String key = entry.getKey();
            LinkedList<File> files = entry.getValue();

            // 创建对应的相似文件目录
            File sameFilePath = new File(sameFileRootPath, FileUtils.removeSuffixName(key));
            if (!sameFilePath.mkdir()) {
                System.out.println("相似文件目录：" + key + " 创建失败或已存在");
                continue; // 如果目录创建失败，继续下一个目录
            }

            // 移动每个相似文件到对应的目录
            for (File file : files) {
                File targetFile = new File(sameFilePath, file.getName());
                try {
                    Files.move(file.toPath(), targetFile.toPath());
                    System.out.println("已将文件 " + file.getName() + " 移动到 " + sameFilePath.getAbsolutePath());
                } catch (IOException e) {
                    System.out.println("移动文件 " + file.getName() + " 失败: " + e.getMessage());
                }
            }
        }
        System.out.println("所有相似文件已处理完成。");
    }
}
